package openmind.demo.mapUsage;

/**
 * @author wangzhuangzhuang
 * @DESC:
 * @date 2022-01-06 12:10
 */

import java.util.Arrays;
import java.util.List;

/***
 * map可以对管道流中的数据进行转换操作，但是如果管道中还有管道该如何处理？
 * 即：如何处理二维数组及二维集合类。实现一个简单的需求：将“hello”，“world”两个字符串组成的集合，
 * 元素的每一个字母打印出来。如果不用Stream我们怎么写？写2层for循环,第一层遍历字符串，并且将字符串拆分成char数组，
 * 第二层for循环遍历char数组。
 *
 */

public class FlatMapUsage {
	public static void main(String[] args) {
		rightUse();
		/**
		 * h
		 * e
		 * l
		 * l
		 * o
		 * w
		 * o
		 * r
		 * d
		 * */

		wrongUse();

		/**
		 * java.util.stream.ReferencePipeline$Head@3b9a45b3
		 * java.util.stream.ReferencePipeline$Head@7699a589
		 * */
	}

	private static void rightUse(){
		List<String> words = Arrays.asList("hello", "word");
		words.stream()
				.flatMap(w -> Arrays.stream(w.split("")))
				.forEach(System.out::println);
	}

	private static void wrongUse(){
		List<String> words = Arrays.asList("hello", "word");
		words.stream()
				.map(w -> Arrays.stream(w.split("")))  //[[h,e,l,l,o],[w,o,r,l,d]]
				.forEach(System.out::println);
	}
}